
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';

class InterviewTabsController extends GetxController {
  final GetStorage _storage = GetStorage("interview_tab_box"); // 用于持久化存储
  final String _key = "interview_tab_box";

  final int _maxRecords = 8; // 最大记录数

  // 默认 tabs，不可删除
  final List<String> defaultTabs = ["推荐", "最新"];

  // 用 RxList 包装 tabs 列表
  RxList<String> tabs = RxList(["推荐", "最新"]);

  // 推荐关键词列表
  final List<String> keywordsList = [
    "华为",
    "字节跳动",
    "百度",
    "京东",
    "阿里巴巴",
    "腾讯",
    "React",
    "Vue",
    "Flutter",
    "Uniapp"
  ];

  // 新增变量：未选择的关键词列表（响应式）
  final RxList<String> unselectedKeywords = RxList<String>();

  // 获取 Tab 的图标路径
  String getTabIconPath(String tab) {
    switch (tab) {
      case "推荐":
        return "interview_recommend.svg";
      case "最新":
        return "interview_new.svg";
      case "华为":
        return "huawei.svg";
      case "字节跳动":
        return "zjtd.svg";
      case "百度":
        return "baidu.svg";
      case "京东":
        return "jingdong.svg";
      case "阿里巴巴":
        return "alibaba.svg";
      case "腾讯":
        return "tencent.svg";
      case "React":
        return "react.svg";
      case "Vue":
        return "vue.svg";
      case "Flutter":
        return "flutter.svg";
      case "Uniapp":
        return "uniapp.svg";
      default:
        return "";
    }
  }

  @override
  void onInit() {
    super.onInit();

    // 从 GetStorage 中加载 tabs，如果没有数据则使用默认值
    List<dynamic>? savedTabs = _storage.read<List<dynamic>>(_key);

    if (savedTabs != null && savedTabs.isNotEmpty) {
      // 校验存储的 tabs 数据类型是否正确，并加载数据
      tabs.value = savedTabs.whereType<String>().toList();
    } else {
      tabs.value = defaultTabs;
    }

    // 确保默认 tabs 始终存在
    _ensureDefaultTabs();

    // 初始化未选择的关键词列表
    _updateUnselectedKeywords();

    // 监听 tabs 的变化，动态更新未选择的关键词
    ever(tabs, (_) => _updateUnselectedKeywords());
  }

  // 添加新的 Tab
  void addTab(String tab) {
    
    if (tabs.length >= _maxRecords) {
      // 超过最大记录数，打印日志或者弹出提示
      Get.rawSnackbar(
        message: "至多添加$_maxRecords个分类"  , 
        backgroundColor: Colors.black , 
        snackPosition:SnackPosition.TOP,
      );
      return;
    }
    if (!tabs.contains(tab)) {
      tabs.add(tab);
      _saveTabs();
    } else {
      // 防止重复添加
      Get.snackbar("提示", "标签已存在");
    }
  }

  // 从推荐关键词列表中添加 Tab
  void addTabFromKeyword(String keyword) {
    if (keyword.isNotEmpty) {
      addTab(keyword); // 调用通用的 addTab 方法
    }
  }

  // 删除指定的 Tab，保留默认 Tabs
  void removeTab(String tab) {
    if (!defaultTabs.contains(tab) && tabs.contains(tab)) {
      tabs.remove(tab);
      _saveTabs();
    } else if (defaultTabs.contains(tab)) {
      // 防止删除默认 Tabs
      Get.snackbar("提示", "默认标签不可删除");
    }
  }

  // 清空非默认 Tabs，保留默认 Tabs
  void clearTabs() {
    tabs.value = defaultTabs;
    _saveTabs();
  }

  // 确保默认 Tabs 始终存在
  void _ensureDefaultTabs() {
    for (var tab in defaultTabs) {
      if (!tabs.contains(tab)) {
        tabs.insert(0, tab); // 确保默认 Tabs 插入到最前面
      }
    }
    _saveTabs();
  }

  // 保存 tabs 到 GetStorage
  void _saveTabs() {
    _storage.write(_key, tabs);
  }

  // 新增方法：更新未选择的关键词列表
  void _updateUnselectedKeywords() {
    unselectedKeywords.assignAll(
      keywordsList.where((keyword) => !tabs.contains(keyword)).toList(),
    );
  }

  // 新增方法：更新 tabs
  void updateTabs(List<String> newTabs) {
    // 过滤掉已经存在的 tab 避免重复添加
    List<String> uniqueTabs = newTabs.where((tab) => !tabs.contains(tab)).toList();

    // 如果超过最大记录数，打印提示
    if (tabs.length + uniqueTabs.length > _maxRecords) {
      Get.snackbar("提示", "添加的标签超过最大数量限制");
      return;
    }
    // 将新的 tab 列表添加到现有的 tabs
    tabs.addAll(uniqueTabs);
    // 保存更新后的 tabs
    _saveTabs();
    // 确保默认 tabs 始终存在
    _ensureDefaultTabs();
    // 更新未选择的关键词列表
    _updateUnselectedKeywords();
  }

}
